
import axios from 'axios';
import Qs from 'qs';
import router from '../router/app';
import store from '../store';
require('./global');

export default{
  install (Vue, options) {
    // ----------------------------------------------------------------
    // 关闭生产模式下给出的提示
    Vue.config.productionTip = false;
    // ----------------------------------------------------------------
    // 创建ajax
    Vue.prototype.axios = axios.create({
      baseURL: process.env.NODE_ENV === 'development' ? `/webapi/` : `${global.backUrl}/`,
      timeout: 10000,
      withCredentials: true,
      // 这时候我们通过Qs.stringify转换为表单查询参数
      transformRequest: [data => {
        data = Qs.stringify(data);
        return data;
      }],
      // 设置Content-Type
      headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
    });
    // ----------------------------------------------------------------
    // 添加一个请求拦截器
    Vue.prototype.axios.interceptors.request.use(config => {
      // 在请求发送之前做一些事
      return config;
    }, function (error) {
      // 当出现请求错误是做一些事
      return Promise.reject(error);
    });
    // ----------------------------------------------------------------
    // 添加一个返回拦截器
    Vue.prototype.axios.interceptors.response.use(response => {
      // 如果返回值为2000，则跳转到登录页
      if (response.data.status === 2000) {
        if (!['/login', '/register', '/forgetPassword', '/selectArea', '/serviceCenter'].includes(router.history.current.fullPath)) {
          Vue.prototype.Toast(response.data.message);
          router.push('/login');
        }
      }
      // 对返回的数据进行一些处理
      return response;
    }, function () {
      // Vue.prototype.Loading(false);
      // // 对返回的错误进行一些处理
      // if (error.message.includes('timeout')) {
      //   Vue.prototype.Toast('网络错误');
      // } else if (error.message.match(/network/i)) {
      //   Vue.prototype.Modal(`${error.message}，该内容可能被浏览器广告过滤屏蔽，请关闭广告过滤后进行访问`, '确定', () => {
      //     router.go(-1);
      //   });
      // };
      // return Promise.reject(error);
    });
    // ----------------------------------------------------------------
    // 存储localStorage
    Vue.prototype.setStore = (name, content) => {
      if (!name) return;
      if (typeof content !== 'string') {
        content = JSON.stringify(content);
      }
      window.localStorage.setItem(name, content);
    };
    // ----------------------------------------------------------------
    // 获取localStorage
    Vue.prototype.getStore = name => {
      if (!name) return;
      return window.localStorage.getItem(name);
    };
    // ----------------------------------------------------------------
    // 删除localStorage
    Vue.prototype.removeStore = name => {
      if (!name) return;
      window.localStorage.removeItem(name);
    };
    // ----------------------------------------------------------------
    // loading加载
    Vue.prototype.Loading = boolean => {
      store.commit('showLoading', boolean);
    };
    // ----------------------------------------------------------------
    // 加载密码框
    Vue.prototype.ShowPassword = callback => {
      store.commit('showModal', {
        showType: 'password',
        payCallback: callback
      });
    };
    // ----------------------------------------------------------------
    // 加载普通弹框
    Vue.prototype.Modal = (title, content, btnTitle, btnCallback, modalClass, btnClass) => {
      store.commit('showModal', {
        showType: 'default',
        title: title,
        content: content,
        btnTitle: btnTitle,
        btnCallback: btnCallback,
        modalClass: modalClass,
        btnClass: btnClass
      });
    };
    // ----------------------------------------------------------------
    // 加载地址弹框
    Vue.prototype.ShowAddress = callback => {
      store.commit('showModal', {
        addressShow: true,
        showType: 'address',
        callBack: callback
      });
    };
    // ----------------------------------------------------------------
    // 是否是微信浏览器
    Vue.prototype.IsWechat = () => {
      return !!navigator.userAgent.toLowerCase().match(/MicroMessenger/i);
    };
    // 是否是空值
    Vue.prototype.HasData = string => {
      return !!(string !== null && string !== undefined && string.toString().replace(/\s/g, ''));
    };
    // ----------------------------------------------------------------
    // 名字过长，中间隐藏
    Vue.prototype.HideString = str => {
      return str.length > 9 ? str.replace(/([\S]{3})\S+([\S]{3})/, '$1***$2') : str;
    };
    // ----------------------------------------------------------------
    // toast弹窗
    Vue.prototype.Toast = (message, icon, show = true) => {
      store.commit('showToast', {
        show: show,
        message: message,
        icon: icon
      });
    };
    // ----------------------------------------------------------------
    // 手机号码隐藏中间四位
    Vue.prototype.HidePhone = phone => {
      return phone.constructor.name !== 'String' ? phone.toString().replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') : phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
    };
    // ----------------------------------------------------------------
    // 是否是空数组
    Vue.prototype.IsAirArr = object => {
      return !!(object.constructor.name === 'Array' && !object.length);
    };
    // 判断是否登录
    // const Others = ['register', 'login', 'forgetPassword'];
    // // 跳转前
    // router.beforeEach((to, from, next) => {
    //   console.log(to.name);
    //   // 判断是否开发，如果在白名单内，不做判断
    //   if (Others.join('*').match(to.fullPath.replace('/', '')) || Others.join('*').match(to.name) !== null) {
    //     next();
    //   } else {
    //     Vue.prototype.axios.get('index/base/is_login')
    //       .then(({data}) => {
    //         // 如果返回值为2000，则跳转到登录页
    //         if (data.status === 2000) {
    //           Vue.prototype.Toast(data.message);
    //           router.push('/login');
    //         } else {
    //           next();
    //         }
    //       })
    //       .catch(function (error) {
    //         console.log(error);
    //       });
    //   }
    // });
  }
};
